Skip to content

SEP 2 -- 系统健康监控方案

全站访问性能

第三方监控云服务:腾讯云的拨测,听云,OneAPM,监控宝等(待决策)

问题:
1. 静态资源访问性能
2. 接口访问性能

拨测

介绍:对网站、域名、后台接口等进行周期性监控,可通过查看可用率和延时随时间区间变化来帮助分析站点质量情况。

费用:免费,但限制了最多可配置10个拨测任务(一个任务对应一个接口)。

监控数据:各区域可用率和接口延时趋势,配置可用率的阈值能达到邮件报警的作用。

优点:免费,而且就在腾讯云上面
缺点:监控数量被限制,无法分析静态页面的性能

听云

介绍:基于真实用户的浏览器端网站性能监测,可配置关键页面和关键ajax的监控,可设置告警阈值通过邮件发送。


优点:需要解决的问题都可以解决,支持告警
缺点:费用高,需要在html页面配置听云JS探针(传数据到它们服务器的脚本)

监控宝

优点:需要解决的问题都可以解决,可以加探针,也可以不加探针
缺点:费用高,100api配额的监控,一年是20w,网页性能监控0.3元/次

oneAPM

Bi功能:受访页面、Ajax、脚本错误、浏览器、地理、运营商。
这部分数据对前端工程师非常重要,白屏时间、首屏时间、网页就绪时间,OneAPM 统计了每一个 URL 的这些指数的平均时间,从中找出最耗时间的 URL ,对代码响应的改良。


优点:需要解决的问题都可以解决
缺点:费用待咨询,需要在html页面配置听云JS探针(传数据到它们服务器的脚本),不支持告警,报表是下载的

性能报告

每日发昨日数据的统计报告。

接口性能报告:多维度统计

  • 平均时长排序,前10条。
  • 最长时间排序,前10条。
  • 请求个数排序,前10条。
新增mangodb表
表名:requests_log
字段:
id
request_url         str         请求接口
request_method      str         请求方式
processing_time     decimal     处理时间(秒)
request_params      str         请求参数
request_time        datetime    请求时的时间
line_number         int         行号
request_uid         int         在base类里面创建的一个用于标记每个请求的uid,方便后续查询
http_status         int         http状态
exception           str         报错信息
service_name        str         提供服务的平台
create_time         datetime    创建时间


新增mangodb表
表名:requests_log_summary
字段:
id
details    array_object   每种类型的详细信息

           request_url         str         请求接口
           request_method      str         请求方式
               decimal     处理时间(秒)
           request_params      str         请求参数
           request_time        datetime    请求时的时间
           line_number         int         行号
           request_uid         int         在base类里面创建的一个用于标记每个请求的uid,方便后续查询
           http_status         int         http状态
           avg_time            double      平均时长,log_type为1时会有
           request_count       int         请求个数,log_type为3时会有
           exception           str         报错信息,log_type为5时会有

log_type            str         记录类型,1:平均时长,2:最长时间,3:请求个数,4:非200错误,5:exception错误
service_name        str         提供服务的平台
create_time         datetime    创建时间


解决方案:重写common 里面的base类,计算每个接口处理时间,按特殊格式打印到日志的方式,顺便把所有模块都做一个access日志,定时脚本去分析数据。

非200错误或者exception,在重写的base里面发送邮件,并打印到日志。

新开一个监控工程。

统计脚本所要做的任务:
1.  每天1点统计分析各个平台的log日志
2.  分析日志,把超过3s的请求保存到requests_log里面
2.  记录接口的性能,从表日志里面 取前10的平均时长,最长时间,请求个数  保存到requests_log_summary
3.  统计非200,和exception的日志到requests_log和requests_log_summary
4.  处理下面慢查询日志,输出到报告
5.  把以上信息输出到报表,发送到邮件组



DB性能报告:慢查询报告

解决方案:

* mongo开启慢查询,设置慢查询阈值1s,日志是放在system.profile里面的,通过定时脚本查询前一天的慢查询放到报告里面(保存为文件)。
* mysql开启慢查询,设置慢查询阈值1s,慢查询日志可以存储在日志文件里面,用脚本执行 mysql-log-filter 分析日志放入报告中(保存为文件)(mysql看了下后台管理里面基本没有慢日志,所以暂时没做)

系统报错监控

http非2XX错误(直接在上面重写的base类抓取到,下面的Nginx拉去暂定)

拉取ngnix日志,所有的http非2xx返回都可能是异常,需要逐个分析。

解决方案:定时脚本,通过ngxtop 这个包 查出前一天不为2XX的数据,列出对应状态对应的含义及日志记录的信息,放入报告中。

业务代码exception

业务代码的所有exception都需要分析。

解决方案:重写的base类可以抓取到所有exception,可以发送邮件通知,并打印到日志,用于每日脚本抓取,放入报告中。

业务代码非0返回(非0 的日志信息已经打印到access里面了)

业务代码的非0返回,有些是正常的业务流程,有些确实是系统出错,这里可能需要提前做好一些配置能力,能够根据接口和错误码过滤掉一些合理的报错。

暂定:把非0 的日志信息已经打印到access里面了